# -*- coding: utf-8 -*-
from mod.server import extraServerApifrom legendaryPowerScript._lpcommon import apiUtilfrom legendaryPowerScript.item import itemTypesfrom legendaryPowerScript.item.legendaryItem import LegendaryItemfrom legendaryPowerScript.spell.spellTypes.CommandSpell import CommandSpellimport datetimeclass ActivityUI:
    """
    活动用户界面类，用于处理与活动相关的用户界面逻辑。
    """

    def __init__(self, creature, activityType):
        """
        初始化活动用户界面实例。

        Args:
            creature (Creature): 交互的生物对象。
            activityType (ActivityType): 活动的类型实例。

        Raises:
            None
        """
        pass

    def handleClick(self, clickId, value):
        # type: (str, any) -> bool
        """
        处理点击事件。注意：客户端在点击任意一个按钮后会锁定点击状态，期间客户端点击界面按钮不会响应，直到UI此函数执行完，

        Args:
            clickId (str): 点击的按钮的点击ID，在创建按钮组件时会随机生成。注意，每次新建一个ActivityUI后，同一个按钮的点击ID是不同的
            value (any): 按钮的值，主要用于更改了 开关（1=开，0=关），选择数量（=玩家输入的数量）时的值

        Returns:
            bool: 点击事件处理结果。true则刷新界面，false则为客户端重置可点击状态
        """
        pass

    def refreshClickable(self):
        # type: () -> None
        """
        为客户端刷新可点击的界面元素。
        """
        pass

    def open(self, isReopen=False):
        # type: (bool) -> None
        """
        打开活动用户界面。

        Args:
            isReopen (bool): 是否是重新打开界面。若为True： 则若玩家当前正在查看其他UI，则不会强制使当前UI跳出
        """
        pass

    def setOnClick(self, clickId, component):
        # type: (clickId, component) -> None
        """
        设置点击事件的回调组件。

        Args:
            clickId: 组件的 ID。
            component: 被点击的组件对象。
        """
        pass

class ActivityComponent:
    """
    代表活动用户界面中的单个组件，可以是按钮、文本、图片等，具有序列化和初始化功能。
    """

    def __init__(self, ui, path, componentType=None):
        """
        初始化 ActivityComponent 类的新实例。

        Args:
            ui (ActivityUI): 该组件所属的活动界面实例。
            path (str): 组件在界面中的路径标识。
            componentType (dict, optional): 组件类型定义，包含组件的配置信息。

        Attributes:
            texture (str, optional): 组件的贴图路径。
            item (LegendaryItem, optional): 组件关联的物品对象。
            active (bool, optional): 组件是否可交互。
            clickId (str, optional): 组件的点击事件ID。
            value (float, optional): 组件的数值，例如进度条的值或选择数值组件的当前值。
            text (str, optional): 组件的文本信息。
            hoveringText (list, optional): 当鼠标悬停在组件上时显示的文本信息列表。
        """
        self.texture = ""  # type: str
        self.item = LegendaryItem()  # type: LegendaryItem
        self.active = False  # type: bool
        self.clickId = ""  # type: str
        self.value = 0.0  # type: float
        self.text = ""  # type: str
        self.hoveringText = []  # type: list
        pass

    def serialize(self, whole):
        # type: (dict) -> dict
        """
        将组件的状态和配置序列化为字典格式，以便可以发送到客户端。

        Args:
            whole (dict): 包含整个活动界面序列化数据的字典。

        Returns:
            dict: 组件的序列化数据。
        """
        pass

    def init(self):
        # type: () -> None
        """
        初始化组件，执行配置文件中的脚本，并设置可见性、点击事件等。
        如果组件类型包含创建脚本，则执行该脚本。
        """
        pass

    def SetElementSize(self, size):
        # type: (int) -> None
        """
        设置列表组件的元素数量。

        Args:
            size (int): 列表组件应该包含的元素数量。
        """
        pass

    def GetIndex(self):
        # type: () -> int
        """
        获取当前组件在所属列表中的索引。

        Returns:
            int: 组件的索引。
        """
        pass

    def SetPosition(self, position):
        # type: (tuple) -> None
        """
        设置组件在界面中的位置。

        Args:
            position (tuple): 组件的坐标位置，格式为 (x, y)。
        """
        pass

    def SetAlpha(self, alpha):
        # type: (float) -> None
        """
        设置组件的透明度。

        Args:
            alpha (float): 透明度值，范围从 0（完全透明）到 1（完全不透明）。
        """
        pass

    def SetActive(self, active):
        # type: (bool) -> None
        """
        设置组件是否可交互。

        Args:
            active (bool): 如果为 True，则组件可交互。
        """
        pass

    def SetVisible(self, visible):
        # type: (bool) -> None
        """
        设置组件的可见性。

        Args:
            visible (bool): 如果为 True，则组件可见。
        """
        pass

    def SetItem(self, item):
        # type: (LegendaryItem) -> None
        """
        设置组件关联的物品。

        Args:
            item (LegendaryItem): 关联的物品对象。
        """
        pass

    def SetText(self, texture):
        # type: (str) -> None
        """
        设置组件的文本信息。

        Args:
            text (str): 要显示的文本。
        """
        pass

    def SetTexture(self, texture):
        # type: (str) -> None
        """
        设置组件的贴图。

        Args:
            texture (str): 贴图资源的路径。
        """
        pass

    def SetValue(self, value):
        # type: (float) -> None
        """
        设置进度条（0~1）、选择数值、开关（0=关，1-开）组件的数值。

        Args:
            value (float): 组件的数值。
        """
        pass

    def GetSub(self, path, type, componentType=None):
        # type: (str, str, str or ComponentType, optional) -> ActivityComponent
        """
        获取或创建子组件。

        Args:
            path (str): 子组件的路径。
            type (str): 子组件的类型。可用的有：列表 面板 选择数值 开关 图片 按钮 物品 进度条 文本/文字/标签
            componentType (str or ComponentType, optional): 子组件的控件类型，对应配置文件中的类型ID。

        Returns:
            ActivityComponent: 子组件。
        """
        pass

    def onClick(self, value):
        # type: (any) -> bool
        """
        处理组件的点击事件。

        Args:
            value (any): 按钮的值，主要用于更改了 开关（1=开，0=关），选择数量（=玩家输入的数量）时的值

        Returns:
            bool: 点击事件是否成功处理。
        """
        pass

    def getTypeHint(self):
        # type: () -> str
        """
        根据配置中的中文类型名。返回用于客户端的英文类型名

        Returns:
            str: 组件类型的提示字符串。
        """

        type = self.type
        if type == "列表":
            return "List"
        elif type == "面板":
            return "Base"
        elif type == "选择数值":
            return "SelectAmount"
        elif type == "开关":
            return "Toggle"
        elif type == "图片":
            return "Image"
        elif type == "按钮":
            return "Button"
        elif type == "物品":
            return "Item"
        elif type == "进度条":
            return "Progressbar"
        elif type == "文本" or type == "标签" or type == "文字":
            return "Label"
        else:
            return None
